package pers.jl.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import org.springframework.util.DigestUtils;
import pers.jl.common.R;
import pers.jl.entity.Employee;
import pers.jl.mapper.EmployeeMapper;
import pers.jl.service.IEmployeeService;

import javax.servlet.http.HttpServletRequest;


/**
 * <p>
 * 员工信息 服务实现类
 * </p>
 *
 * @author luge
 * @since 2023-04-22
 */
@Service
@Slf4j
public class EmployeeServiceImpl extends ServiceImpl<EmployeeMapper, Employee> implements IEmployeeService {

    /**
     * 登录判断逻辑
     * @param httpRequest
     * @param employee
     * @return
     */
    public R employeeLogin(HttpServletRequest httpRequest, Employee employee) {
        // 1.判断管理员用户名是否存在(注意要查询用户名，不要查询姓名)
        LambdaQueryWrapper<Employee> lambdaQueryWrapper = new LambdaQueryWrapper<>();
        // 用户输入用户名不为空才添加查询条件
        lambdaQueryWrapper.eq(employee.getUsername()!=null,Employee::getUsername, employee.getUsername());
        // 用户数据不存在，登录失败
        Employee emp = this.getOne(lambdaQueryWrapper);
        if (emp == null) {
            return R.error("用户名不存在，请重新输入！");
        }
        // 2. 判断加密后的密码是否正确
        //密码使用MD5加密
        String passward = DigestUtils.md5DigestAsHex(employee.getPassword().getBytes());
        // 密码不相等
        if (!emp.getPassword().equals(passward)){
            return R.error("密码错误，请重新输入！");
        }
        // 3. 判断用户状态是否正常
        // 账户不正常
        if (emp.getStatus()!=1){
            return R.error("用户已被锁定，无法登录！");
        }
        // 4. 登录成功，将用户id存入session和线程中，不要在这里将id存入线程变量，线程不一样，根本获取不到
        httpRequest.getSession().setAttribute("employeeId",emp.getId());
        log.info(emp.getUsername()+"登录成功");
        return R.success(emp);
    }
}
